home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / e / amigae21b.lha / Amiga_E_v2.1b / Sources / Other / GetString.e < prev    next >
Text File  |  1992-09-02  |  4KB  |  129 lines

  1. /* GetString.e
  2.  * Opens a string requester from Shell (useful in scripts) and stores the
  3.  * result in an environment variable or prints it.
  4.  *
  5.  * Public Domain by Diego Caravana.
  6.  *
  7.  *
  8.  * Thanks to Wouter van Oortmerssen for his VERY GOOD work, hoping that he
  9.  * will continue to improve E language !
  10.  *
  11.  * Hey, consider to learn E !!!
  12.  *
  13.  * ========================================================================
  14.  *
  15.  * $Id: GetString.e,v 1.3 93/02/13 00:55:26 diego Rel $
  16.  *
  17.  * $Log:    GetString.e,v $
  18.  * Revision 1.3  93/02/13  00:55:26  diego
  19.  * Some small adjustements. Better code.
  20.  * Released to Wouter for inclusion in next release of E.
  21.  * WOW!
  22.  * 
  23.  * 
  24.  * Revision 1.2.1.2  93/02/05  21:46:46  diego
  25.  * Some adjustements of the code. Some small corrections.
  26.  * Ready for realeasing.
  27.  * 
  28.  * Revision 1.2.1.1  93/02/03  22:00:37  diego
  29.  * Added more E exception support (i.e. RAISE/IF)
  30.  * Fixed nasty bug of uninitialized variables.
  31.  * Some adjustements. More reliable code.
  32.  * 
  33.  * Revision 1.2  93/02/02  22:09:13  diego
  34.  * More E-like code :) i.e. HANDLE/EXCEPT
  35.  * 
  36.  * Revision 1.1  93/02/02  22:02:50  diego
  37.  * Some bug fixes (forgot FreeArgs()).
  38.  * Enhanced code.
  39.  * 
  40.  * Revision 1.0  93/02/02  21:51:52  diego
  41.  * Initial revision
  42.  * 
  43.  */
  44.  
  45. OPT OSVERSION=37
  46.  
  47. MODULE 'ReqTools', 'libraries/reqtools', 'dos/var', 'utility/tagitem'
  48.  
  49. CONST ARGS_NUM=7, BUFLEN=100
  50. ENUM  ARG_TITLE, ARG_USTRING, ARG_MSG, ARG_VAR, ARG_GLOBAL, ARG_STDOUT,
  51.       ARG_PUBSCREEN
  52. ENUM  ERR_NONE=0, ERR_WRONGARGS, ERR_BADKEYS, ERR_NOREQLIB, ERR_CANCEL,
  53.       ERR_NOVAR
  54.  
  55. RAISE    ERR_NOREQLIB    IF OpenLibrary()=NIL,
  56.     ERR_WRONGARGS    IF ReadArgs()=NIL,
  57.     ERR_CANCEL        IF RtGetStringA()=NIL,
  58.     ERR_NOVAR        IF SetVar()=NIL
  59.  
  60. PROC main() HANDLE
  61. DEF buf[BUFLEN]:STRING, args[ARGS_NUM]:ARRAY OF LONG, rdargs=NIL,
  62.     template
  63.  
  64.     /* version string, as C= says... */
  65.     VOID '$VER: GetString 1.3 (13.02.93) by Diego Caravana'
  66.  
  67.     /* do this if you don't want to meet the Guru :) (only if RAISE automatic
  68.      * mechanism is used!)
  69.      */
  70.     reqtoolsbase:=0
  71.  
  72.     /* assignment made just for commodity */
  73.     template:='TITLE/A,STRING/K,MSG=MESSAGE/K,VAR=VARIABLE/K,'+
  74.         'GLOBAL/S,STDOUT/S,PUBSCREEN/K'
  75.  
  76.     /* open Nico's library */
  77.     reqtoolsbase := OpenLibrary('reqtools.library', REQTOOLSVERSION)
  78.  
  79.     /* get user arguments from command line */
  80.     rdargs := ReadArgs(template, args, 0)
  81.  
  82.     /* do not allow the use of VAR/GLOBAL and STDOUT keywords
  83.      * because in this way the user can print the result directly on stdout
  84.      * without being bored by env variables
  85.      */
  86.     IF ((StrLen(args[ARG_VAR]) <> 0) OR args[ARG_GLOBAL]) AND
  87.            args[ARG_STDOUT] THEN Raise(ERR_BADKEYS)
  88.  
  89.     /* the default string specified by the user is copied in the buffer passed
  90.      * to the requester
  91.      */
  92.     StrCopy(buf, args[ARG_USTRING], ALL)
  93.  
  94.     /* open the requester (the result is checked via RAISE/IF) */
  95.     RtGetStringA(buf, BUFLEN, args[ARG_TITLE], 0,
  96.             [ RTGS_TEXTFMT, args[ARG_MSG], RTGS_ALLOWEMPTY, TRUE,
  97.               RT_PUBSCRNAME, args[ARG_PUBSCREEN], TAG_DONE ])
  98.  
  99.     IF args[ARG_STDOUT]        /* choose the way */
  100.     WriteF(buf)
  101.     ELSE
  102.     /* default name for environment variable */
  103.     IF StrLen(args[ARG_VAR]) = 0 THEN args[ARG_VAR] := 'GetStringResult'
  104.  
  105.     SetVar(args[ARG_VAR], buf, StrLen(buf),
  106.         IF args[ARG_GLOBAL] THEN GVF_GLOBAL_ONLY ELSE GVF_LOCAL_ONLY)
  107.     ENDIF
  108.  
  109.     /* let's exit cleanly */
  110.     Raise(ERR_NONE)
  111.  
  112. EXCEPT
  113.     IF rdargs THEN FreeArgs(rdargs)
  114.     IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
  115.  
  116.     SELECT exception
  117.     CASE ERR_NOREQLIB
  118.         WriteF('*** could not open reqtools.library v38!\n')
  119.     CASE ERR_BADKEYS
  120.         WriteF('*** no simultaneous VAR/GLOBAL and STDOUT keywords.\n')
  121.     CASE ERR_CANCEL; CleanUp(5);
  122.     DEFAULT
  123.         PrintFault(IoErr(), '*** DOS Error')
  124.     ENDSELECT
  125.  
  126.     IF exception THEN CleanUp(10)
  127.     CleanUp(0)
  128. ENDPROC
  129.